package GUI;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import gra.Account;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Wygrany extends JFrame 
{
    WygranyPanel w;
    RankingPanel r;
    VirtualPlayer[] gracze;
    Account[] wygrani;
    Image tlo;
    Controler kontroler;
    
    public Wygrany( Account[] winners, VirtualPlayer[] players, int iloscGraczy, Controler kontrolerGry )
    {
        setBounds( 200, 20, 900, 700 );
        setLayout( null );

        kontroler    = kontrolerGry;
        wygrani      = winners;
        gracze       = players;
        w            = new WygranyPanel( this );
        r            = new RankingPanel( this );
        
        w.setBounds( 0,   0, 700, 700 );
        r.setBounds( 700, 0, 200, 700 );
        add( w );
        add( r );
    }
    
}


class CardPanel extends JPanel
{
    Image[] karty;
    boolean orientacja; // false - pionowa, true - pozioma
    
    CardPanel( VirtualPlayer gracz, boolean orientacja )
    {
        setLayout( null );
        this.orientacja = orientacja;
        karty           = new Image[5];
        
        
        for( int i = 0; i < 5; i++ )
        {
            karty[i]          = null;
            karty[i]          = gracz.zwrocObrazek(i);//  virtualCard.cardImages[i];
        }
        
        if( orientacja )
        {
            setBounds( 0, 0, 400, 120 );
        }
        else
        {
            setBounds( 0, 0, 80, 440 );
        }
    }
    

    public void paintComponent( Graphics g ) 
    {   
        //poziomo
        if( orientacja )
        {
            for( int i = 0; i < 5; i++ )
            {
                g.drawImage( karty[i], i*80, 0, 80, 120, null );
            }
        }
        //pionowo
        else
        {
            for( int i = 0; i < 5; i++ )
            {
                g.drawImage( karty[i], 0, i*80, 80, 120, null );
            }
        }
        
    }
}


class WygranyPanel extends JPanel
{
    JLabel wygrany;
    JLabel konfiguracja;
    JButton wyjdz;
    CardPanel[] paneleGraczy;
    JLabel[] imionaGraczy;
    Image tlo;
    Wygrany frame;
    
    WygranyPanel( final Wygrany f )
    {
        setLayout( null );
        frame = f;

        wygrany      = new JLabel( "");
        konfiguracja = new JLabel( "" );
        wyjdz        = new JButton("Wyjdz");
        paneleGraczy = new CardPanel[frame.gracze.length];
        imionaGraczy = new JLabel[frame.gracze.length];
        
        wygrany.setForeground     ( Color.WHITE );
        konfiguracja.setForeground( Color.WHITE );
        
        try
        {
            tlo = ImageIO.read( new File("images/winnerBackground.png") );
        }
        catch( IOException e )
        {
            System.out.println("Brak pliku tla");
        }
        
        if( frame.wygrani.length > 1 )
        {
            wygrany.setText("<html>Zwyciezcy: ");
            
            for( int i = 0; i < frame.wygrani.length; i++ )
            {
                wygrany.setText( wygrany.getText() + "<br>" + frame.wygrani[i].owner.nazwa );
            }
            wygrany.setText( wygrany.getText() + "</html>" );
            
            for( int i = 0; i < frame.gracze.length; i++ )
            {
                konfiguracja.setText( frame.wygrani[0].figuraGracza() );
            }
        }
        else
        {
            wygrany.setText( "Zwyciezca: "+ frame.wygrani[0].owner.nazwa );
            konfiguracja.setText( frame.wygrani[0].figuraGracza() );
        }
        
        
        for( int i = 0; i < paneleGraczy.length; i++ )
        {
            imionaGraczy[i] = new JLabel( frame.gracze[i].player.owner.nazwa );
            imionaGraczy[i].setForeground( Color.WHITE );
            
            switch(i)
            {
                case 0 :
                {
                    paneleGraczy[i] = new CardPanel( frame.gracze[i], true );
                    paneleGraczy[i].setLocation( 150, 500 );
                    imionaGraczy[i].setBounds  ( 310, 460, 150, 40 );
                    break;
                }
                case 1 :
                {
                    paneleGraczy[i] = new CardPanel( frame.gracze[i], false );
                    paneleGraczy[i].setLocation( 600, 150 );
                    imionaGraczy[i].setHorizontalAlignment( SwingConstants.RIGHT );
                    imionaGraczy[i].setBounds  ( 520, 110, 150, 40 );
                    break;
                }
                case 2 :
                {
                    paneleGraczy[i] = new CardPanel( frame.gracze[i], true );
                    paneleGraczy[i].setLocation( 150, 20 );
                    imionaGraczy[i].setBounds  ( 310, 150, 150, 40 );
                    break;
                }
                case 3 :
                {
                    paneleGraczy[i] = new CardPanel( frame.gracze[i], false );
                    paneleGraczy[i].setLocation( 20, 150 );
                    imionaGraczy[i].setBounds  ( 30, 110, 150, 40 );
                    break;
                }
            }
        }
        
        wygrany.setBounds     ( 300, 300, 250, 50 );
        konfiguracja.setBounds( 300, 350, 150, 40 );
        wyjdz.setBounds       ( 270, 390, 150, 40 );
        
        wyjdz.addActionListener( new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                f.kontroler.zakonczWygrany();
                frame.setVisible( false );
                frame.dispose();
            }
        });
        
        add( wygrany );
        add( konfiguracja );
        add( wyjdz );
        
        for( int i = 0; i < paneleGraczy.length; i++ )
        {
            add( paneleGraczy[i] );
            add( imionaGraczy[i] );
        }
    }
    
    public void paintComponent( Graphics g ) 
    {
        g.drawImage( tlo, 0, 0, 700, 700, null );
    }
    
}

class RankingPanel extends JPanel
{
    JLabel ranking;
    Image tlo;
    
    RankingPanel( Wygrany wygrany )
    {
        ranking = new JLabel();
        String listaRankingowa = new String("<html>");
        
        ranking.setForeground( Color.WHITE );
        
        ranking.setBounds( 5, 20, 180, 700 );
        
        try
        {
            tlo = ImageIO.read( new File("images/rankingBackground.png") );
        }
        catch( IOException e )
        {
            System.out.println("Brak pliku tla");
        }
        
        listaRankingowa += wygrany.kontroler.zwrocRankingGracza();
        
        ranking.setText( listaRankingowa );
        
        add( ranking );
    }
    
    public void paintComponent( Graphics g ) 
    {
        g.drawImage( tlo, 0, 0, 200, 700, null );
    }
}